package com.kaifamiao.charstreams;

import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;

/**
 * InputStreamReader是字节流通向字符流的桥梁：
 *  它使用指定的charset读取字节并将其解码为字符。
 *  它使用的字符集可以由名称指定或显式给定，或者可以接受平台默认的字符集。
 *      InputStreamReader(InputStream in)
 *      InputStreamReader(InputStream in, Charset cs)
 *      InputStreamReader(InputStream in, CharsetDecoder dec)
 *      InputStreamReader(InputStream in, String charsetName)
 * 通常我们将 InputStreamReader 和 OutputStreamWriter 称作 `转换流`
 */
public class InputStreamReaderTest {

    public static void main(String[] args) throws IOException {
        String pathname = "D:/test/ReaderTest.java";
        // 创建可以读取指定文件内容的字节输入流
        InputStream in = new FileInputStream( pathname );
        Charset charset = StandardCharsets.UTF_8;
        // 创建使用给定字符集(charset)将字节输入流转化为字符输入流
        Reader r = new InputStreamReader( in, charset );

        int n;
        char[] buf = new char[32];
        while( (n = r.read( buf ) ) != -1 ) {
            String s = new String( buf, 0, n );
            System.out.print( s );
        }

        r.close();
        in.close();
    }

}
